home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
L' Effet Pommier 2
/
L'Effet Pommier - Volume 02.iso
/
Arcade
/
Marathon Bonus
/
WAD exporters
/
dmfloor.c
< prev
next >
Wrap
C/C++ Source or Header
|
1995-03-13
|
3KB
|
150 lines
#include <QDOffscreen.h>
#include <stdio.h>
#include <string.h>
#include <stddef.h>
static char wadname[]="doom.wad";
static char inname[]="doom floors.exp";
static unsigned char outname[]="\pdoom floors.rsrc";
void main(void)
{
char fname[10];
long foff,flen;
FILE *wad,*in;
FInfo fi;
short resref;
short pictid;
OSErr err;
Rect bounds;
Ptr dres,filptr,pixptr;
CGrafPtr saveport;
GDHandle savedev;
OpenCPicParams ppar;
GWorldPtr gw;
short rowbytes;
CTabHandle ctab;
PixMapHandle pmh;
PicHandle picthand;
int i;
puts("Ho.");
resref=OpenResFile("\pdoom colours.rsrc");
if (resref==-1) {
err=ResError();
fprintf(stderr,"OpenResFile: %d\n",err);
return;
}
ctab=GetCTable(128);
CloseResFile(resref);
if (!ctab) {
fputs("No colour table found\n",stderr);
return;
}
wad=fopen(wadname,"rb");
if (!wad) {
perror(wadname);
return;
}
in=fopen(inname,"r");
if (!in) {
perror(inname);
return;
}
CreateResFile(outname);
err=ResError();
if (err!=noErr) {
fprintf(stderr,"CreateResFile: %d\n",err);
return;
}
err=GetFInfo(outname,0,&fi);
if (err!=noErr) {
fprintf(stderr,"GetFInfo: %d\n",err);
return;
}
fi.fdType='rsrc';
fi.fdCreator='RSED';
err=SetFInfo(outname,0,&fi);
if (err!=noErr) {
fprintf(stderr,"SetFInfo: %d\n",err);
return;
}
resref=OpenResFile(outname);
if (resref==-1) {
err=ResError();
fprintf(stderr,"OpenResFile: %d\n",err);
return;
}
GetGWorld(&saveport,&savedev);
SetRect(&bounds,0,0,64,64);
err=NewGWorld(&gw,8,&bounds,ctab,NULL,keepLocal|useTempMem);
if (err!=noErr) {
fprintf(stderr,"NewGWorld: %d\n",err);
return;
}
dres=NewPtr(4096);
if (!dres) {
fprintf(stderr,"NewPtr: %d\n",MemError());
return;
}
pmh=GetGWorldPixMap(gw);
rowbytes=(*pmh)->rowBytes&0x3FFF;
SetGWorld(gw,NULL);
ClipRect(&bounds);
SetGWorld(saveport,savedev);
ppar.srcRect=bounds;
ppar.hRes=ppar.vRes=72L<<16;
ppar.version=-2;
ppar.reserved1=0;
ppar.reserved2=0;
for (pictid=128; ; pictid++) {
if (fscanf(in," %s %ld %ld",fname+1,&foff,&flen)!=3)
break;
printf("%s %ld %ld\n",fname+1,foff,flen);
if (flen!=4096) {
fprintf(stderr,"%s: Resource length error\n",fname+1);
continue;
}
if (fseek(wad,foff,SEEK_SET)) {
perror(fname+1);
continue;
}
if (fread(dres,1,4096,wad)!=4096) {
fprintf(stderr,"%s: Unexpected EOF\n",fname+1);
continue;
}
SetGWorld(gw,NULL);
LockPixels(pmh);
pixptr=GetPixBaseAddr(pmh);
filptr=dres;
for (i=64; i>0; i--) {
BlockMoveData(filptr,pixptr,64);
filptr+=64;
pixptr+=rowbytes;
}
picthand=OpenCPicture(&ppar);
CopyBits(&((GrafPtr)gw)->portBits,&((GrafPtr)gw)->portBits,
&bounds,&bounds,srcCopy,NULL);
ClosePicture();
UnlockPixels(pmh);
SetGWorld(saveport,savedev);
fname[0]=strlen(fname+1);
AddResource((Handle)picthand,'PICT',pictid,(StringPtr)fname);
err=ResError();
if (err!=noErr) {
fprintf(stderr,"%s: AddResource: %d\n",fname+1,err);
KillPicture(picthand);
continue;
}
WriteResource((Handle)picthand);
ReleaseResource((Handle)picthand);
}
CloseResFile(resref);
fclose(wad);
fclose(in);
puts("Done!");
return;
}